﻿--1.为赵云此人进行开户开卡操作，赵云身份证：420107199904054233
declare @AccountId int 
insert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime)
values ('420107199904054233','17268915781','赵云',GETDATE())
set @AccountId = @@identity
insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState)
values('420107199904054233',@AccountId,'123456',0,1)
 ;

--2.需要求出张飞的银行卡卡号和余额，张飞身份证：420107199602034138  （1.使用连接查询，2.使用变量）
--逻辑控制
--条件分支if-else
select CardNo 卡号,CardMoney 余额 from BankCard
inner join AccountInfo on BankCard.AccountId=AccountInfo.AccountId
where AccountCode='420107199602034138'
;
--3.某用户银行卡号为“6225547854125656”，该用户执行取钱操作，
--取钱5000元，余额充足则进行取钱操作，并提示"取钱成功"，否则提示“余额不足”。
--条件分支:case-when
declare @balance money
select @balance=(select CardMoney from BankCard where CardNo='6225547854125656')
--可以取钱
if @balance>=5000
	begin
		update BankCard set CardMoney=CardMoney-5000
		where CardNo='6225547854125656'
		insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime)
		values('6225547854125656',0,5000,GETDATE())
	end
--不能取钱
else
	begin
		print'余额不足'
	end
select*from CardExchange
;


--4.查询银行卡信息，将银行卡状态1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”，
--并且根据银行卡余额显示银行卡等级 30万以下为“普通用户”,30万及以上为"VIP用户"，  
--显示列分别为卡号，身份证，姓名，余额，用户等级，银行卡状态。
select CardNo 卡号,AccountCode 身份证号,RealName 姓名,CardMoney 余额 ,
case
	when CardMoney>=300000 then 'VIP用户'
	else'普通用户'
end 用户等级,
case  CardState
	when 1 then '正常'
	when 2 then '挂失'
	when 3 then '冻结'
	when 4 then '注销'
	else '异常'
end 银行卡状态
from BankCard
inner join AccountInfo on BankCard.AccountId=AccountInfo.AccountId
;



--while-
--5.循环打印1-10。
declare @i int=1
while @i <=10
	begin
		print @i
		set @i=@i+1
	end
;

go
​--6.打印99乘法表
declare @i int=1
while @i<9
begin
	declare @str varchar(1000)=''
	declare @j int=1
	while @j<=@i
	begin
		set @str=@str+cast(@i as varchar(1))+'*'+cast(@j as varchar(1))+
		'='+cast(@i*@j as varchar(2))+char(9)
		set @j=@j+1
	end
	set @i=@i+1
	print @str
end
;